/**
 * Copyright (c) 2015, 2023 itemis AG (http://www.itemis.eu) and others.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 * 
 * SPDX-License-Identifier: EPL-2.0
 */
package org.eclipse.xtext.xtext.wizard;

import com.google.common.base.Objects;
import com.google.common.collect.Iterables;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.ObjectExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@FinalFieldsConstructor
@SuppressWarnings("all")
public class IdeProjectDescriptor extends ProjectDescriptor {
  @Override
  public String getNameQualifier() {
    return ".ide";
  }

  @Override
  public Set<? extends ProjectDescriptor> getUpstreamProjects() {
    RuntimeProjectDescriptor _runtimeProject = this.getConfig().getRuntimeProject();
    return Collections.<ProjectDescriptor>unmodifiableSet(CollectionLiterals.<ProjectDescriptor>newHashSet(_runtimeProject));
  }

  @Override
  public boolean isEclipsePluginProject() {
    return (Objects.equal(this.getConfig().getPreferredBuildSystem(), BuildSystem.NONE) || this.getConfig().getUiProject().isEnabled());
  }

  @Override
  public boolean isPartOfGradleBuild() {
    return true;
  }

  @Override
  public boolean isPartOfMavenBuild() {
    return true;
  }

  @Override
  public Set<ExternalDependency> getExternalDependencies() {
    LinkedHashSet<ExternalDependency> _xblockexpression = null;
    {
      final LinkedHashSet<ExternalDependency> deps = CollectionLiterals.<ExternalDependency>newLinkedHashSet();
      Set<ExternalDependency> _externalDependencies = super.getExternalDependencies();
      Iterables.<ExternalDependency>addAll(deps, _externalDependencies);
      ExternalDependency _createXtextDependency = ExternalDependency.createXtextDependency("org.eclipse.xtext.ide");
      deps.add(_createXtextDependency);
      ExternalDependency _createXtextDependency_1 = ExternalDependency.createXtextDependency("org.eclipse.xtext.xbase.ide");
      deps.add(_createXtextDependency_1);
      _xblockexpression = deps;
    }
    return _xblockexpression;
  }

  @Override
  public PomFile pom() {
    PomFile _pom = super.pom();
    final Procedure1<PomFile> _function = (PomFile it) -> {
      StringConcatenation _builder = new StringConcatenation();
      {
        if (((!Objects.equal(this.getConfig().getLanguageServer(), LanguageServer.NONE)) && this.isEclipsePluginProject())) {
          _builder.append("<dependencies>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("<dependency>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("<groupId>ch.qos.reload4j</groupId>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("<artifactId>reload4j</artifactId>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("</dependency>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("<dependency>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("<groupId>org.eclipse.lsp4j</groupId>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("<artifactId>org.eclipse.lsp4j</artifactId>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("</dependency>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("<dependency>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("<groupId>org.ow2.asm</groupId>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("<artifactId>asm</artifactId>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("</dependency>");
          _builder.newLine();
          _builder.append("</dependencies>");
          _builder.newLine();
        }
      }
      _builder.append("<build>");
      _builder.newLine();
      {
        if (((!this.isEclipsePluginProject()) && Objects.equal(this.getConfig().getSourceLayout(), SourceLayout.PLAIN))) {
          _builder.append("\t");
          _builder.append("<sourceDirectory>");
          String _sourceFolder = this.sourceFolder(Outlet.MAIN_JAVA);
          _builder.append(_sourceFolder, "\t");
          _builder.append("</sourceDirectory>");
          _builder.newLineIfNotEmpty();
          _builder.append("\t");
          _builder.append("<resources>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("\t");
          _builder.append("<resource>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("\t\t");
          _builder.append("<directory>");
          String _sourceFolder_1 = this.sourceFolder(Outlet.MAIN_RESOURCES);
          _builder.append(_sourceFolder_1, "\t\t\t");
          _builder.append("</directory>");
          _builder.newLineIfNotEmpty();
          _builder.append("\t");
          _builder.append("\t\t");
          _builder.append("<excludes>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("\t\t\t");
          _builder.append("<exclude>**/*.java</exclude>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("\t\t\t");
          _builder.append("<exclude>**/*.xtend</exclude>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("\t\t");
          _builder.append("</excludes>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("\t");
          _builder.append("</resource>");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("</resources>");
          _builder.newLine();
        }
      }
      _builder.append("\t");
      _builder.append("<plugins>");
      _builder.newLine();
      _builder.append("\t\t");
      _builder.append("<plugin>");
      _builder.newLine();
      _builder.append("\t\t\t");
      _builder.append("<groupId>org.eclipse.xtend</groupId>");
      _builder.newLine();
      _builder.append("\t\t\t");
      _builder.append("<artifactId>xtend-maven-plugin</artifactId>");
      _builder.newLine();
      _builder.append("\t\t");
      _builder.append("</plugin>");
      _builder.newLine();
      {
        boolean _isEclipsePluginProject = this.isEclipsePluginProject();
        boolean _not = (!_isEclipsePluginProject);
        if (_not) {
          _builder.append("\t\t");
          _builder.append("<plugin>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t");
          _builder.append("<groupId>org.codehaus.mojo</groupId>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t");
          _builder.append("<artifactId>build-helper-maven-plugin</artifactId>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t");
          _builder.append("<version>3.3.0</version>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t");
          _builder.append("<executions>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t");
          _builder.append("<execution>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("<id>add-source</id>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("<phase>initialize</phase>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("<goals>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<goal>add-source</goal>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<goal>add-resource</goal>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("</goals>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("<configuration>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<sources>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t");
          _builder.append("<source>");
          String _sourceFolder_2 = this.sourceFolder(Outlet.MAIN_SRC_GEN);
          _builder.append(_sourceFolder_2, "\t\t\t\t\t\t\t");
          _builder.append("</source>");
          _builder.newLineIfNotEmpty();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("</sources>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<resources>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t");
          _builder.append("<resource>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t");
          _builder.append("<directory>");
          String _sourceFolder_3 = this.sourceFolder(Outlet.MAIN_SRC_GEN);
          _builder.append(_sourceFolder_3, "\t\t\t\t\t\t\t\t");
          _builder.append("</directory>");
          _builder.newLineIfNotEmpty();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t");
          _builder.append("<excludes>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t\t");
          _builder.append("<exclude>**/*.java</exclude>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t\t");
          _builder.append("<exclude>**/*.g</exclude>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t");
          _builder.append("</excludes>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t");
          _builder.append("</resource>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("</resources>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("</configuration>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t");
          _builder.append("</execution>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t");
          _builder.append("</executions>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("</plugin>");
          _builder.newLine();
        }
      }
      {
        LanguageServer _languageServer = this.getConfig().getLanguageServer();
        boolean _notEquals = (!Objects.equal(_languageServer, LanguageServer.NONE));
        if (_notEquals) {
          {
            boolean _isEclipsePluginProject_1 = this.isEclipsePluginProject();
            if (_isEclipsePluginProject_1) {
              _builder.append("\t\t");
              _builder.append("<plugin>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<groupId>org.eclipse.tycho</groupId>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<artifactId>target-platform-configuration</artifactId>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<configuration>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("<pomDependencies>consider</pomDependencies>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("</configuration>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("</plugin>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("<plugin>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<groupId>org.apache.maven.plugins</groupId>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<artifactId>maven-dependency-plugin</artifactId>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<version>3.5.0</version>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<executions>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("<execution>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<id>copy-dependencies</id>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<phase>package</phase>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<goals>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<goal>copy-dependencies</goal>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("</goals>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<configuration>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<excludeGroupIds>p2.eclipse-feature</excludeGroupIds>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<outputDirectory>${project.build.directory}/libs</outputDirectory>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<overWriteReleases>false</overWriteReleases>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<overWriteSnapshots>false</overWriteSnapshots>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<overWriteIfNewer>true</overWriteIfNewer>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<excludeTransitive>true</excludeTransitive>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<excludeArtifactIds>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("com.ibm.icu,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.apache.ant,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.apache.commons.lang,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.apache.commons.logging,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.core.commands,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.core.contenttype,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.core.expressions,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.core.filesystem,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.core.jobs,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.core.resources,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.core.runtime,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.core.variables,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.debug.core,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.emf.codegen.ecore,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.emf.codegen,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.emf.mwe.core,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.emf.mwe.utils,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.emf.mwe2.lib,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.emf.mwe2.runtime,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.equinox.app,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.equinox.preferences,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.equinox.registry,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.jdt.core,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.jdt.debug,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.jdt.launching,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("org.eclipse.text,");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("</excludeArtifactIds>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("</configuration>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("</execution>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("</executions>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("</plugin>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("<plugin>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<groupId>com.googlecode.addjars-maven-plugin</groupId>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<artifactId>addjars-maven-plugin</artifactId>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<version>1.0.5</version>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<executions>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("<execution>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<phase>package</phase>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<goals>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<goal>add-jars</goal>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("</goals>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<configuration>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<resources>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<resource>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t\t");
              _builder.append("<directory>${project.build.directory}/libs</directory>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("</resource>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("</resources>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("</configuration>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("</execution>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("</executions>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("</plugin>");
              _builder.newLine();
            }
          }
          {
            LanguageServer _languageServer_1 = this.getConfig().getLanguageServer();
            boolean _equals = Objects.equal(_languageServer_1, LanguageServer.FATJAR);
            if (_equals) {
              _builder.append("\t\t");
              _builder.append("<plugin>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<groupId>org.apache.maven.plugins</groupId>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<artifactId>maven-shade-plugin</artifactId>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<version>3.4.1</version>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<configuration>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("<transformers>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<transformer");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("implementation=\"org.apache.maven.plugins.shade.resource.ManifestResourceTransformer\">");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<mainClass>org.eclipse.xtext.ide.server.ServerLauncher</mainClass>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("</transformer>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<transformer");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("implementation=\"org.apache.maven.plugins.shade.resource.AppendingTransformer\">");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<resource>plugin.properties</resource>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("</transformer>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<transformer ");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("implementation=\"org.apache.maven.plugins.shade.resource.ServicesResourceTransformer\">");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("</transformer>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("</transformers>");
              _builder.newLine();
              {
                boolean _isEclipsePluginProject_2 = this.isEclipsePluginProject();
                if (_isEclipsePluginProject_2) {
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("<artifactSet>");
                  _builder.newLine();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t");
                  _builder.append("<excludes><!-- avoid duplicate inclusion due to addjars plugin -->");
                  _builder.newLine();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("<exclude>*:");
                  String _name = this.getConfig().getIdeProject().getName();
                  _builder.append(_name, "\t\t\t\t\t\t");
                  _builder.append("-org.eclipse.lsp4j*</exclude>");
                  _builder.newLineIfNotEmpty();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("<exclude>*:");
                  String _name_1 = this.getConfig().getIdeProject().getName();
                  _builder.append(_name_1, "\t\t\t\t\t\t");
                  _builder.append("-org.eclipse.xtext.xbase.lib*</exclude>");
                  _builder.newLineIfNotEmpty();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("<exclude>*:");
                  String _name_2 = this.getConfig().getIdeProject().getName();
                  _builder.append(_name_2, "\t\t\t\t\t\t");
                  _builder.append("-org.eclipse.xtend.lib*</exclude>");
                  _builder.newLineIfNotEmpty();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("<exclude>*:");
                  String _name_3 = this.getConfig().getIdeProject().getName();
                  _builder.append(_name_3, "\t\t\t\t\t\t");
                  _builder.append("-com.google.guava*</exclude>");
                  _builder.newLineIfNotEmpty();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("<exclude>*:");
                  String _name_4 = this.getConfig().getIdeProject().getName();
                  _builder.append(_name_4, "\t\t\t\t\t\t");
                  _builder.append("-asm*</exclude>");
                  _builder.newLineIfNotEmpty();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("<exclude>*:");
                  String _name_5 = this.getConfig().getIdeProject().getName();
                  _builder.append(_name_5, "\t\t\t\t\t\t");
                  _builder.append("-log4j*</exclude>");
                  _builder.newLineIfNotEmpty();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("<exclude>*:");
                  String _name_6 = this.getConfig().getIdeProject().getName();
                  _builder.append(_name_6, "\t\t\t\t\t\t");
                  _builder.append("-reload4j*</exclude>");
                  _builder.newLineIfNotEmpty();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("<exclude>*:");
                  String _name_7 = this.getConfig().getIdeProject().getName();
                  _builder.append(_name_7, "\t\t\t\t\t\t");
                  _builder.append("-org.objectweb.asm*</exclude>");
                  _builder.newLineIfNotEmpty();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("<exclude>*:");
                  String _name_8 = this.getConfig().getIdeProject().getName();
                  _builder.append(_name_8, "\t\t\t\t\t\t");
                  _builder.append("-org.apache.log4j*</exclude>");
                  _builder.newLineIfNotEmpty();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("\t");
                  _builder.append("</excludes>");
                  _builder.newLine();
                  _builder.append("\t\t");
                  _builder.append("\t\t");
                  _builder.append("</artifactSet>");
                  _builder.newLine();
                }
              }
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("<filters>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<filter>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<artifact>*:*</artifact>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<excludes>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>META-INF/INDEX.LIST</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>META-INF/*.SF</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>META-INF/*.DSA</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>META-INF/*.RSA</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>.options</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>.api_description</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>*.profile</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>*.html</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>about.*</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>about_files/*</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>plugin.xml</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>systembundle.properties</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>profile.list</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>**/*._trace</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>**/*.g</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>**/*.mwe2</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t\t");
              _builder.append("<exclude>**/*.xtext</exclude>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("</excludes>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("</filter>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("</filters>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("<shadedArtifactAttached>true</shadedArtifactAttached>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("<shadedClassifierName>ls</shadedClassifierName>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("<minimizeJar>false</minimizeJar>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("</configuration>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("<executions>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("<execution>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<phase>package</phase>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("<goals>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t\t");
              _builder.append("<goal>shade</goal>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t\t");
              _builder.append("</goals>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t\t");
              _builder.append("</execution>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("\t");
              _builder.append("</executions>");
              _builder.newLine();
              _builder.append("\t\t");
              _builder.append("</plugin>");
              _builder.newLine();
            }
          }
        }
      }
      {
        LanguageServer _languageServer_2 = this.getConfig().getLanguageServer();
        boolean _equals_1 = Objects.equal(_languageServer_2, LanguageServer.APP);
        if (_equals_1) {
          _builder.append("\t\t");
          _builder.append("<plugin>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t");
          _builder.append("<groupId>org.codehaus.mojo</groupId>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t");
          _builder.append("<artifactId>appassembler-maven-plugin</artifactId>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t");
          _builder.append("<version>2.1.0</version>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t");
          _builder.append("<executions>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t");
          _builder.append("<execution>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("<phase>package</phase>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("<goals>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<goal>assemble</goal>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("</goals>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("<configuration>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<assembleDirectory>${project.build.directory}/languageserver</assembleDirectory>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<repositoryLayout>flat</repositoryLayout>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<useWildcardClassPath>true</useWildcardClassPath>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<!-- uncomment to enable remote debugging");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<extraJvmArguments>-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000</extraJvmArguments>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("-->");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("<programs>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t");
          _builder.append("<program>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t");
          _builder.append("<id>mydsl-ls</id>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t");
          _builder.append("<mainClass>org.eclipse.xtext.ide.server.ServerLauncher</mainClass>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t");
          _builder.append("<!-- uncomment to enable options");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t");
          _builder.append("<commandLineArguments>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t\t");
          _builder.append("<commandLineArgument>-trace</commandLineArgument>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t\t");
          _builder.append("<commandLineArgument>-log</commandLineArgument>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t\t");
          _builder.append("<commandLineArgument>-noValidate</commandLineArgument>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t");
          _builder.append("</commandLineArguments>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t\t");
          _builder.append("-->");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t\t");
          _builder.append("</program>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t\t");
          _builder.append("</programs>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t\t");
          _builder.append("</configuration>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t\t");
          _builder.append("</execution>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("\t");
          _builder.append("</executions>");
          _builder.newLine();
          _builder.append("\t\t");
          _builder.append("</plugin>");
          _builder.newLine();
        }
      }
      _builder.append("\t");
      _builder.append("</plugins>");
      _builder.newLine();
      _builder.append("</build>");
      _builder.newLine();
      it.setBuildSection(_builder.toString());
      String _xifexpression = null;
      boolean _isEclipsePluginProject_3 = this.isEclipsePluginProject();
      if (_isEclipsePluginProject_3) {
        _xifexpression = "eclipse-plugin";
      } else {
        _xifexpression = "jar";
      }
      it.setPackaging(_xifexpression);
    };
    return ObjectExtensions.<PomFile>operator_doubleArrow(_pom, _function);
  }

  @Override
  public GradleBuildFile buildGradle() {
    GradleBuildFile _buildGradle = super.buildGradle();
    final Procedure1<GradleBuildFile> _function = (GradleBuildFile it) -> {
      StringConcatenation _builder = new StringConcatenation();
      {
        LanguageServer _languageServer = this.getConfig().getLanguageServer();
        boolean _tripleEquals = (_languageServer == LanguageServer.FATJAR);
        if (_tripleEquals) {
          _builder.append("plugins {");
          _builder.newLine();
          _builder.append("\t");
          _builder.append("id \'com.github.johnrengelman.shadow\' version \'7.1.2\'");
          _builder.newLine();
          _builder.append("}");
          _builder.newLine();
          _builder.newLine();
        }
      }
      it.setPluginsSection(_builder.toString());
      StringConcatenation _builder_1 = new StringConcatenation();
      {
        LanguageServer _languageServer_1 = this.getConfig().getLanguageServer();
        boolean _tripleNotEquals = (_languageServer_1 != LanguageServer.NONE);
        if (_tripleNotEquals) {
          _builder_1.newLine();
          _builder_1.append("apply plugin: \'application\'");
          _builder_1.newLine();
          {
            LanguageServer _languageServer_2 = this.getConfig().getLanguageServer();
            boolean _tripleEquals_1 = (_languageServer_2 == LanguageServer.FATJAR);
            if (_tripleEquals_1) {
              _builder_1.append("apply plugin: \'com.github.johnrengelman.shadow\'");
              _builder_1.newLine();
            }
          }
          _builder_1.append("mainClassName = \"org.eclipse.xtext.ide.server.ServerLauncher\"");
          _builder_1.newLine();
          _builder_1.newLine();
          {
            LanguageServer _languageServer_3 = this.getConfig().getLanguageServer();
            boolean _tripleEquals_2 = (_languageServer_3 == LanguageServer.FATJAR);
            if (_tripleEquals_2) {
              _builder_1.append("shadowJar {");
              _builder_1.newLine();
              _builder_1.append("\t");
              _builder_1.append("from(project.convention.getPlugin(JavaPluginConvention).sourceSets.main.output)");
              _builder_1.newLine();
              _builder_1.append("\t");
              _builder_1.append("configurations = [project.configurations.runtimeClasspath]");
              _builder_1.newLine();
              _builder_1.append("\t");
              _builder_1.append("exclude(\'META-INF/INDEX.LIST\', \'META-INF/*.SF\', \'META-INF/*.DSA\', \'META-INF/*.RSA\',\'schema/*\',");
              _builder_1.newLine();
              _builder_1.append("\t\t");
              _builder_1.append("\'.options\', \'.api_description\', \'*.profile\', \'*.html\', \'about.*\', \'about_files/*\',");
              _builder_1.newLine();
              _builder_1.append("\t\t");
              _builder_1.append("\'plugin.xml\', \'systembundle.properties\', \'profile.list\')");
              _builder_1.newLine();
              _builder_1.append("\t");
              _builder_1.append("archiveClassifier = \'ls\'");
              _builder_1.newLine();
              _builder_1.append("\t");
              _builder_1.append("append(\'plugin.properties\')");
              _builder_1.newLine();
              _builder_1.append("\t");
              _builder_1.append("mergeServiceFiles()");
              _builder_1.newLine();
              _builder_1.append("}");
              _builder_1.newLine();
            }
          }
        }
      }
      it.setAdditionalContent(_builder_1.toString());
    };
    return ObjectExtensions.<GradleBuildFile>operator_doubleArrow(_buildGradle, _function);
  }

  public IdeProjectDescriptor(final WizardConfiguration config) {
    super(config);
  }
}
